¿Qué es un lenguaje de consulta a base de datos? ¿Qué es una consulta de actualización en base de datos? ¿Cuál es el lenguaje que crea, modifica y borra datos? ¿Qué es el lenguaje de SQL?

Lenguajes de consulta y actualización de datos

Álgebra relacional

El álgebra relacional es un lenguaje de consulta procedimental (no declarativo) que sirve de base formal para el lenguaje SQL-DML de manipulación de datos (que sí es declarativo). Consiste en un conjunto de operaciones que describen paso a paso (de ahí que sea procedimental) cómo computar una respuesta sobre las relaciones definidas en el modelo relacional. Se utiliza como una representación intermedia de una consulta a una base de datos, permitiendo obtener una versión más optimizada y eficiente de la misma.

La unidad de trabajo del álgebra relacional son las relaciones (tablas), sobre las que se aplican una serie de operaciones definidas, que pueden ser de dos categorías distintas:

El resultado de una operación siempre es una nueva relación, lo que permite componer diferentes operaciones del álgebra relacional formando expresiones del álgebra relacional.

Operaciones unarias

Selección (σ)

La selección permite seleccionar un subconjunto de tuplas (filas) de una relación (R), trayendo como resultado todas aquellas que cumplan las condiciones:

σ_P (R)

Se pueden realizar comparaciones en la condición, e incluso conectar distintas condiciones usando operadores lógicos.

Si ninguna tupla cumple las condiciones (operación contradictoria), el resultado es vacío. Por el contrario, si todas las tuplas cumplen las condiciones, el resultado será la misma relación.

Proyección ()

La proyección permite extraer atributos (A_1,A_2,…,A_n ) de una relación, dando como resultado un subconjunto vertical de atributos de la relación (R):

_(A_1,A_2,…,A_n ) (R)

Utilizando la proyección se pueden reordenar los atributos y crear nuevas columnas en la relación. Incluso, se pueden establecer los valores que tendrán las tuplas del nuevo atributo.

Renombramiento (ρ)

El renombramiento permite poner nombre a las expresiones del álgebra relacional:

ρ_A (R)

Esta operación es útil en las consultas SQL para acortar los nombres de las tablas y escribir el código más sintético.

Las relaciones R por sí mismas se consideran expresiones (triviales) del álgebra relacional. Por tanto, también se puede aplicar la operación renombramiento a una relación R para obtener la misma relación con un nombre nuevo. Hacer esto es obligatorio cuando se usa dos veces la misma relación en una operación (por ejemplo, cuando las relaciones son recursivas).

Operaciones binarias

Unión (∪)

La unión retorna el conjunto de tuplas que están en la relación R, en la relación S, o en ambas. R y S deben ser relaciones compatibles.

R∪S

Las tuplas que están en las dos relaciones aparecerán una sola vez en el resultado.

Para que las relaciones sean compatibles deben tener la misma cantidad de atributos y los dominios ser compatibles (no podrían tener distintos tipos de datos).

Diferencia (-)

La diferencia entrega todas aquellas tuplas que están en R pero no en S. R y S deben ser relaciones compatibles:

R-S

Intersección (∩)

La intersección, como en teoría de conjuntos, corresponde al conjunto de todas las tuplas que están en R y en S, siendo R y S relaciones compatibles.

R∩S

Producto cartesiano (×)

El producto cartesiano entrega una relación, cuyo esquema corresponde a una combinación de todas las tuplas de R con cada una de las tuplas de S, y sus atributos corresponden a los de R seguidos por los de S:

R×S

Esta operación trae dificultades, ya que multiplica cada registro de R por cada uno de los de S sin importar si en la realidad existe o no la relación. Por ello existen otras operaciones que la mejoran.

Reunión natural (⋈)

La reunión natural hace un producto cartesiano (×) de sus dos argumentos y realiza una selección (σ) forzando la igualdad de atributos que aparecen en ambas relaciones, eliminando repetidos:

R⋈S

Se trata de un producto cartesiano con una condición de unión embebida.

Reunión externa

La reunión externa es una variante de la reunión natural en la que se intenta mantener toda la información de los operandos, incluso para aquellas filas que no participan en la reunión. Se rellenan con null las tuplas que no tienen correspondencia en la reunión. Posee 3 variantes:

Procesamiento y optimización de consultas

El procesamiento de consultas hace referencia a una serie de actividades implicadas en la extracción de datos de una base de datos. Estas actividades incluyen la traducción de consultas expresadas en lenguajes de bases de datos de alto nivel en expresiones implementadas en el nivel físico del sistema, así como transformaciones de optimización de consultas y la evaluación real de las mismas.

  1. Análisis y traducción

Antes de empezar el procesamiento de una consulta, el sistema debe traducirla a una forma utilizable. La representación interna que utiliza de la consulta es el álgebra relacional extendido. Durante la generación del formato interno de una consulta, el analizador comprueba la sintaxis de la consulta del usuario y verifica que los nombres de las relaciones que aparecen en ella sean nombres de relaciones en la base de datos.

Posteriormente, se construye un árbol para el análisis de la consulta, que se transformará en una expresión del álgebra relacional. La estructura es la de árbol invertido: empieza a partir de una raíz que indica el resultado que se busca y se subdivide en las distintas operaciones que debe resolver previamente para llegar al mismo. Las operaciones del último nivel son las que se realizan primero.

Si la consulta estuviera expresada en términos de una vista, la fase de traducción también sustituye todas las referencias a vistas por las expresiones del álgebra relacional que las definen.

  • Optimización
  • El objetivo del optimizador es determinar distintos planes de ejecución de una consulta y determinar cuál es el óptimo. Dada una consulta, generalmente hay varios métodos para obtener la respuesta y cada una de ellas se puede expresar de diferentes maneras y traducirse a distintas expresiones del álgebra relacional. Además, se puede ejecutar cada operación del álgebra relacional utilizando alguno de los diferentes algoritmos. La optimización de consultas es el proceso de selección del plan de ejecución de las consultas más eficiente de entre las muchas estrategias generalmente disponibles para el procesamiento de una consulta dada, especialmente si la misma es compleja. No se espera que los usuarios escriban las consultas de modo que puedan procesarse de manera eficiente.

    Para determinar el plan óptimo, los SGBD utilizan una conjunción de dos criterios:

    Optimización basada en el costo

    Optimización basada en heurísticas

    Se espera que el sistema cree un plan de ejecución que minimice el costo de la ejecución de las consultas, el cual normalmente viene dado por:

    Estos costos los estima gracias a los datos que toma del catálogo de estadísticas.

    La optimización basada en costos muchas veces genera un conjunto grande de planes y determinar el óptimo entre ellos puede requerir un gran esfuerzo de cómputo. Por ello, los SGBD también usan heurísticas, es decir, una serie de reglas predefinidas que indican cómo optimizar los planes. Sin embargo, a veces también se vuelven ineficientes porque no toman en cuenta las circunstancias en las cuales se procesa la consulta (capacidad de hardware disponible, etc.).

    Para armar los planes de ejecución y elegir el mejor, el optimizador utiliza:

    Expresiones equivalentes

    Se dice que dos expresiones del álgebra relacional son equivalentes si, en cada ejemplar legal de la base de datos, las dos expresiones generan el mismo conjunto de tuplas (un ejemplar legal de la base de datos es la que satisface todas las restricciones de integridad especificadas en el esquema de la base de datos). El orden de las tuplas resulta irrelevante; puede que las dos expresiones generen las tuplas en órdenes diferentes, pero se considerarán equivalentes siempre que el conjunto de tuplas sea el mismo.

    Estadísticas

    Para estimar cuál es el costo de cada expresión del álgebra relacional, el optimizador utiliza estadísticas que le permiten arribar al resultado. Para obtenerlas utilizan datos de tablas, índices y atributos. Los catálogos de los SGBD almacenan la siguiente información estadística sobre las relaciones de las bases de datos:

    A partir de los mismos, el SGBD construye histogramas para almacenar la distribución de valores de cada atributo, la cual es una forma muy común de almacenar estadísticas.

    En los histogramas, los valores del atributo se dividen en una serie de rangos, y con cada rango el histograma asocia el número de tuplas cuyo valor del atributo se halla en ese rango. Registran el número de los valores distintos en cada rango, además del número de tuplas con en ese rango.

    Es importante tener en cuenta que las estimaciones no son muy precisas, ya que se basan en suposiciones que pueden no cumplirse exactamente. El plan de evaluación de consultas que tenga el costo estimado de ejecución más reducido puede, por tanto, no tener el costo real de ejecución más bajo.

    Un motivo por el cual las estimaciones no son precisas es porque deben actualizarse cada vez que se modifica una relación de la base de datos, lo cual supone una sobrecarga sustancial de los recursos del sistema. Por lo tanto, lo que se suele hacer es actualizar las estadísticas en los momentos de menor carga de trabajo.

    Primitivas de evaluación

    Una vez que se decide cuál es la mejor expresión del álgebra relacional para ejecutar una consulta, hay que determinar cuál es la mejor manera de llevarla a cabo. No basta con proporcionar la expresión, sino que hay que anotar en ella las instrucciones que especifiquen cómo evaluar cada operación. Las primitivas de evaluación son operaciones del álgebra relacional anotadas con instrucciones sobre su evaluación. La secuencia de operaciones primitivas que se pueden utilizar en la evaluación de una consulta establece un plan de ejecución de la consulta.

    Operación selección

    Si la operación que se va a llevar a cabo es una selección, los algoritmos que permiten implementar son: